package _10_串;
/*
    字符串的蛮力匹配算法1
 */
public class BruteForce01 {
    /**
     *
     * @param text 文本串
     * @param pattern 模式串
     * @return
     */
    public static int indexOf(String text,String pattern){
        if(text == null || pattern == null) return -1;
        char[] textChars = text.toCharArray();
        int tLen = textChars.length; //文本串的长度
        if(tLen == 0) return -1;
        char[] patternChars = pattern.toCharArray();
        int pLen = patternChars.length; //模式串的长度
        if(pLen == 0) return -1;
        if(tLen < pLen) return -1; //文本串的长度小于模式串的长度

        int pi = 0,ti = 0; // pi模式串的起点，ti文本串的起点

        int LinJieZhi = tLen - pLen; //tLen - pLen 文本串和模式串开始比较最后一次的临界值,
        //ti - pi 是每一轮比较中text首个比较字符的位置,减少比较次数
        while(pi<pLen && ti-pi<=LinJieZhi){
             if(textChars[ti] == patternChars[pi]){ //匹配成功，两个都向下跟进
                 ti++;
                 pi++;
             }else{ //字符不相等，pi从0开始，ti从pi的下一个
                 ti -= pi - 1;
                 pi = 0;
             }
        }
        //只考虑pi == pLen的情况
        return (pi == pLen) ? (ti-pi) : -1;
    }

    public static void main(String[] args) {
        System.out.println(BruteForce01.indexOf("Hello World","H"));
        System.out.println(BruteForce01.indexOf("Hello World","d"));
        System.out.println(BruteForce01.indexOf("Hello World","or"));
        System.out.println(BruteForce01.indexOf("Hello World","abc"));
    }
}
